#!/bin/bash

# 最终环境变量解析功能测试

set -e  # 遇到错误立即退出

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"  # 留在 modb 目录中

echo "开始最终环境变量解析功能测试..."

# 设置测试环境变量
export PROJ_ROOT="/home/apachee/trunk/Crystal/CrystalFlowAnalyzer"

# 创建测试文件列表，包含多种环境变量格式
cat > final_env_test.list << 'EOF'
# 测试多种环境变量格式
$PROJ_ROOT/a9soc/design/usb2/src/lsp/test_usb_module.v
${PROJ_ROOT}/a9soc/design/usb2/src/lsp/usb2_DWC_usb3_lsp_nsr.v
EOF

echo -n "测试环境变量解析功能 ... "
if ./moparse -f final_env_test.list -o final_env_test.modb > final_env_test.log 2>&1; then
    echo "通过"
else
    echo "失败"
    cat final_env_test.log
    exit 1
fi

# 验证解析结果
echo -n "验证解析结果 ... "
if ./moparse -s final_env_test.modb | grep -q "test_usb_module"; then
    echo "通过"
else
    echo "失败: 未找到期望的模块"
    ./moparse -s final_env_test.modb
    exit 1
fi

# 测试详细信息
echo -n "验证详细信息 ... "
if ./moparse -sv final_env_test.modb | grep -q "Parameters (2)"; then
    echo "通过"
else
    echo "失败: 参数信息不正确"
    ./moparse -sv final_env_test.modb
    exit 1
fi

# 测试不存在的环境变量
echo -n "测试不存在的环境变量处理 ... "
cat > bad_env_test.list << 'EOF'
$NONEXISTENT_VAR/a9soc/design/usb2/src/lsp/test_usb_module.v
EOF

if ./moparse -f bad_env_test.list -o bad_env_test.modb > bad_env_test.log 2>&1; then
    echo "失败: 应该失败但成功了"
    exit 1
else
    if grep -q "Cannot open file" bad_env_test.log; then
        echo "通过"
    else
        echo "失败: 错误信息不正确"
        cat bad_env_test.log
        exit 1
    fi
fi

# 清理测试文件
echo "清理测试文件..."
rm -f final_env_test.list final_env_test.modb final_env_test.log
rm -f bad_env_test.list bad_env_test.modb bad_env_test.log

echo
echo "最终环境变量解析功能测试总结:"
echo "✓ 基本环境变量路径解析 ($VAR)"
echo "✓ 花括号环境变量路径解析 (\${VAR})"
echo "✓ 文件列表处理"
echo "✓ 不存在环境变量的错误处理"
echo
echo "所有环境变量解析测试通过!"